use std::{env, fs};
mod lexer;
use lexer::{lex, TokKind};

fn main() {
    let args: Vec<String> = env::args().collect();
    if args.len() < 2 {
        eprintln!("Usage: {} <filename>", args[0]);
        std::process::exit(1);
    }
    let filename = &args[1];

    let input = fs::read_to_string(filename).expect("Failed to read file");

    let (tokens, errors) = lex(&input);

    if !errors.is_empty() {
        for e in errors {
            eprintln!("Error type A at Line {}: Mysterious character \"{}\".", e.line, e.ch);
        }
        return; // 发现错误就直接返回，不再打印 tokens
    }

    // 如果没有错误，则打印所有识别到的 tokens
    if tokens.is_empty() {
        eprintln!("--- 没有找到可打印的 Token（文件可能为空或只有空白/注释） ---");
    } else {
        for t in tokens {
            let name = t.kind.name_for_print();
            let lexeme = t.kind.lexeme_for_print();
            eprintln!("{name} {lexeme} at Line {}.", t.line);
        }
    }
}
